[IA64] Paravirtualize mmap handlers of /proc/bus/pci
authorawilliam@xenbuild2.aw <awilliam@xenbuild2.aw>
Sun, 18 Feb 2007 23:00:52 +0000 (16:00 -0700)
committerawilliam@xenbuild2.aw <awilliam@xenbuild2.aw>
Sun, 18 Feb 2007 23:00:52 +0000 (16:00 -0700)
Signed-off-by: Akio Takebe <takebe_akio@jp.fujitsu.com>
linux-2.6-xen-sparse/arch/ia64/pci/pci.c

index 60b45e79f080dbf11f60e7deb362c1efd37cbc0f..4d3684156a7788b9193141df0f66721001db29c9 100644 (file)
@@ -607,6 +607,14 @@ pci_mmap_page_range (struct pci_dev *dev, struct vm_area_struct *vma,
        else
                vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
 
+       if (is_initial_xendomain()) {
+               unsigned long addr = vma->vm_pgoff << PAGE_SHIFT;
+               size_t size = vma->vm_end - vma->vm_start;
+               unsigned long offset = HYPERVISOR_ioremap(addr, size);
+               if (IS_ERR_VALUE(offset))
+                       return offset;
+       }
+
        if (remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff,
                             vma->vm_end - vma->vm_start, vma->vm_page_prot))
                return -EAGAIN;
@@ -664,6 +672,14 @@ pci_mmap_legacy_page_range(struct pci_bus *bus, struct vm_area_struct *vma)
        vma->vm_pgoff += (unsigned long)addr >> PAGE_SHIFT;
        vma->vm_page_prot = prot;
 
+       if (is_initial_xendomain()) {
+               unsigned long addr = vma->vm_pgoff << PAGE_SHIFT;
+               size_t size = vma->vm_end - vma->vm_start;
+               unsigned long offset = HYPERVISOR_ioremap(addr, size);
+               if (IS_ERR_VALUE(offset))
+                       return offset;
+       }
+
        if (remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff,
                            size, vma->vm_page_prot))
                return -EAGAIN;